package zhengze;
/**
 *	用正则表达式来实现占位符的应用 
 */

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TempMain
{
	/*
	 *	在正则表达式中
	 * 	每一个小括号
	 * 	都是一个分组
	 * 	特殊字符在使用的时候需要转义
	 * 	大括号也是一个特殊字符
	 * */
	private String  regex = "(\\$\\{)(\\w+)\\}";
	/*创建匹配器对象*/
	private Pattern pattern = Pattern.compile(regex);
	public static void main(String[] args)
	{
		/*实现一个占位符
		 * XXX在XX年-->XX年上学期,荣获数学竞赛X等奖,特发此状,以示鼓励,XXX年XX月XX日
		 *	用正则表达式来实现此功能
		 * */
		String reg = "${name}在${stYear}年-->${edYear}年上学期,荣获数学竞赛${deng}等奖,特发此状,以示鼓励,${year}年${month}月${date}日";
		/*可以通过Map 来实现此功能 通过键为其赋值*/
		Map<String, String> condMap = new HashMap<String, String>();
		condMap.put("name", "明小明");
		condMap.put("stYear", "2018");
		condMap.put("edYear", "2019");
		condMap.put("deng", "二");
		condMap.put("year", "2018");
		condMap.put("month", "07");
		condMap.put("date", "09");
		/*把正则表达式和方法连接起来*/
		TempMain main =  new TempMain();
		String res = main.template(reg, condMap);
		System.out.println("-->" + res);
	}
	/*构建一个方法来编辑正则表达式并匹配*/
	public String template(String input , Map<String, String> condMap)
	{
		StringBuffer sb = new StringBuffer();
		/*正则表达式匹配器*/
		Matcher matcher = pattern.matcher(input);
		while(matcher.find())
		{
			//System.out.println("==>"+ matcher.groupCount());
			String key = matcher.group(2);
			System.out.println("=="+key);
			if(condMap.containsKey(key))
			{
				matcher.appendReplacement(sb, condMap.get(key));
			}else
			{
				sb.append(key);
			}
		}
		/*把尾巴加上去*/
		matcher.appendTail(sb);
		return sb.toString();
	}
}
